//
//#ifndef _PROJECTZ_NUSER_NCOMMAND_DUNGEON_ENABLE_MAP_CHANGE_H_
//#define _PROJECTZ_NUSER_NCOMMAND_DUNGEON_ENABLE_MAP_CHANGE_H_
//
//#include "../../engine.h"
//
//#include "../../User.h"
//#include "../../Data.h"
//
//#include "../../NLogic/Space.h"
//
//namespace ProjectZ { namespace NCommand { namespace NMatching {
//
///*
// * 던전 맵 완료 후 다른 맵으로 이동 시 가능 여부 확인 패킷
// * auth : jjaehuny@gamevil.com
// */
//
//class CS_DUNGEON_ENABLE_MAP_CHANGE
//{
//public:
//	static void OnExecute(User * pUser, ::Network::Packet * pPacket)
//	{
//		/* message
//		 * CS_DUNGEON_ENABLE_MAP_CHANGE	0x0808		4	unsigned int	GID : 게임 유니크 Key
//			2	unsigned short	맵 TID
//			2	unsigned short	전환 후X좌표
//			2	unsigned short	전환 후Y좌표
//			2	unsigned short	"방향 벡터(보고있는 방향 0 : RIGHT, 90 : DOWN..)"
//			1	char	맵전환 가능 여부알림 ( 0: 불가능 1: 가능)
//		 */
//		PREPARE_PACKET;
//
//		int gid = 0;
//		uint16_t map_tid = 0;
//		int x = 0;
//		int y = 0;
//		int degree = 0;
//		int enable = 0;
//
//		pPacket->ParseMsg("%d%2d%2d%2d%2d%c", &gid, &map_tid, &x, &y, &degree, &enable);
//
//		::Logger::GETLOG()->ToFile(::Logger::DEBUG, "GID %d CS_DUNGEON_ENABLE_MAP_CHANGE, map_tid=%d, degree=%d, enable=%d", pUser->GetGID(), map_tid, degree, enable);
//
//		//
//		NLogic::Space *pSpace = pUser->GetSpace();
//
//		if( pSpace->GetData()._bSendMapChange == true )
//		{
//			return;
//		}
//
//
//		pUser->player_info.x = x;
//		pUser->player_info.y = y;
//		pUser->player_info.degree = degree;
//		pUser->player_info.DungeonInfo.enable_map_clear = enable;
//
//		//pUser->player_info.DungeonInfo.map_tid = map_tid;
//		pUser->player_info.bReadyFight = false;
//
//		const NLogic::Space::USERTREE & clsUserTree = pSpace->GetUserTree();
//		if (true == clsUserTree.empty())
//			return;
//
//		// 맵 전환이 가능한 상태로 들어온 경우...
//		if( pUser->player_info.DungeonInfo.enable_map_clear == 1 )
//		{
//			bool able = true;
//			pSpace->GetData()._enableCount ++;
//
//			// 전체 유저가 모두 들어온 경우...
//			if ( (int)clsUserTree.size() == pSpace->GetData()._enableCount)
//			{
//				NLogic::Space::USERTREE::const_iterator citr = clsUserTree.begin();
//				for(;citr != clsUserTree.end(); citr++)
//				{
//					User * pTargetUser = ( * citr ).second;
//
//					if( pTargetUser->player_info.DungeonInfo.enable_map_clear == 0 || pUser->player_info.degree != pTargetUser->player_info.degree )
//					{
//						able = false;
//						break;
//					}
//				}
//
//				if( able == true )
//				{
//					// 모두 가능 상태이므로 이때 맵 아이디를 변경해야 한다.
//					NLogic::Space::USERTREE::const_iterator citr = clsUserTree.begin();
//					for(;citr != clsUserTree.end(); citr++)
//					{
//						User * pTargetUser = ( * citr ).second;
//						pTargetUser->player_info.DungeonInfo.map_tid = map_tid;
//						pTargetUser->player_info.DungeonInfo.next_map_tid = 0;
//					}
//
//					::Network::Packet * pNoti = ::Network::GETPACKETPOOL()->SEND_NEW();
//					pNoti->MsgCat("%2d%2d%2d%2d", pUser->player_info.DungeonInfo.map_tid, pUser->player_info.x, pUser->player_info.y, pUser->player_info.degree);
//					pNoti->MakePacket(CMD_SN_DUNGEON_MAP_CHANGE);
//					pSpace->SendAll(pNoti);
//
//					pSpace->GetData()._enableCount = 0;
//					pSpace->GetData()._bSendMapChange = true;
//				}
//
//				return;
//			}
//
//			// 과반수 이상 이동 할수 있는 지역에 들어온 경우 카운트를 진행 하도록 패킷 전송...
//			if ((clsUserTree.size() / 2 + 1) < pSpace->GetData()._enableCount)
//			{
//				NLogic::Space::USERTREE::const_iterator citr = clsUserTree.begin();
//				for(;citr != clsUserTree.end(); citr++)
//				{
//					::Network::Packet * pAck = ::Network::GETPACKETPOOL()->SEND_NEW();
//					uint8_t count = 5;
//					* pAck << count;
//					* pAck << map_tid;
//					pAck->MakePacket(CMD_SN_DUNGEON_MAP_CHANGE_COUNT);
//
//					User * pTargetUser = ( * citr ).second;
//					pTargetUser->player_info.DungeonInfo.next_map_tid = map_tid;
//					pTargetUser->Send(pAck);
//				}
//
//				return;
//			}
//
//			return;
//		}
//
//
//		pSpace->GetData()._enableCount--;
//		if (0 > pSpace->GetData()._enableCount)
//			pSpace->GetData()._enableCount = 0;
//
//		// 과반수 이하로 남은 경우 정지하도록 패킷 전송
//		if ( (clsUserTree.size() / 2 + 1) > pSpace->GetData()._enableCount)
//		{
//			NLogic::Space::USERTREE::const_iterator citr = clsUserTree.begin();
//			for(;citr != clsUserTree.end(); citr++)
//			{
//				::Network::Packet * pAck = ::Network::GETPACKETPOOL()->SEND_NEW();
//				uint8_t count = 0;
//				* pAck << count;
//				* pAck << map_tid;
//				::Logger::GETLOG()->ToAll(::Logger::DEBUG, "CMD_SN_DUNGEON_MAP_CHANGE_COUNT 2");
//				pAck->MakePacket(CMD_SN_DUNGEON_MAP_CHANGE_COUNT);
//
//				User * pTargetUser = ( * citr ).second;
//				pTargetUser->player_info.DungeonInfo.next_map_tid = 0;
//				pTargetUser->Send(pAck);
//			}
//		}
//	}
//};
//
//} /*NBattle*/ } /*NCommand*/ } /*ProjectZ*/
//
//#endif /* _PROJECTZ_NUSER_NCOMMAND_DUNGEON_ENABLE_MAP_CHANGE_H_ */
